home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / linux / kvm.h < prev    next >
C/C++ Source or Header  |  2009-10-16  |  18KB  |  645 lines

  1. #ifndef __LINUX_KVM_H
  2. #define __LINUX_KVM_H
  3.  
  4. /*
  5.  * Userspace interface for /dev/kvm - kernel based virtual machine
  6.  *
  7.  * Note: you must update KVM_API_VERSION if you change this interface.
  8.  */
  9.  
  10. #include <linux/types.h>
  11.  
  12. #include <linux/ioctl.h>
  13. #include <asm/kvm.h>
  14.  
  15. #define KVM_API_VERSION 12
  16.  
  17. /* for KVM_TRACE_ENABLE */
  18. struct kvm_user_trace_setup {
  19.     __u32 buf_size; /* sub_buffer size of each per-cpu */
  20.     __u32 buf_nr; /* the number of sub_buffers of each per-cpu */
  21. };
  22.  
  23. /* for KVM_CREATE_MEMORY_REGION */
  24. struct kvm_memory_region {
  25.     __u32 slot;
  26.     __u32 flags;
  27.     __u64 guest_phys_addr;
  28.     __u64 memory_size; /* bytes */
  29. };
  30.  
  31. /* for KVM_SET_USER_MEMORY_REGION */
  32. struct kvm_userspace_memory_region {
  33.     __u32 slot;
  34.     __u32 flags;
  35.     __u64 guest_phys_addr;
  36.     __u64 memory_size; /* bytes */
  37.     __u64 userspace_addr; /* start of the userspace allocated memory */
  38. };
  39.  
  40. /* for kvm_memory_region::flags */
  41. #define KVM_MEM_LOG_DIRTY_PAGES  1UL
  42.  
  43.  
  44. /* for KVM_IRQ_LINE */
  45. struct kvm_irq_level {
  46.     /*
  47.      * ACPI gsi notion of irq.
  48.      * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47..
  49.      * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23..
  50.      */
  51.     union {
  52.         __u32 irq;
  53.         __s32 status;
  54.     };
  55.     __u32 level;
  56. };
  57.  
  58.  
  59. struct kvm_irqchip {
  60.     __u32 chip_id;
  61.     __u32 pad;
  62.         union {
  63.         char dummy[512];  /* reserving space */
  64. #ifdef __KVM_HAVE_PIT
  65.         struct kvm_pic_state pic;
  66. #endif
  67. #ifdef __KVM_HAVE_IOAPIC
  68.         struct kvm_ioapic_state ioapic;
  69. #endif
  70.     } chip;
  71. };
  72.  
  73. #define KVM_EXIT_UNKNOWN          0
  74. #define KVM_EXIT_EXCEPTION        1
  75. #define KVM_EXIT_IO               2
  76. #define KVM_EXIT_HYPERCALL        3
  77. #define KVM_EXIT_DEBUG            4
  78. #define KVM_EXIT_HLT              5
  79. #define KVM_EXIT_MMIO             6
  80. #define KVM_EXIT_IRQ_WINDOW_OPEN  7
  81. #define KVM_EXIT_SHUTDOWN         8
  82. #define KVM_EXIT_FAIL_ENTRY       9
  83. #define KVM_EXIT_INTR             10
  84. #define KVM_EXIT_SET_TPR          11
  85. #define KVM_EXIT_TPR_ACCESS       12
  86. #define KVM_EXIT_S390_SIEIC       13
  87. #define KVM_EXIT_S390_RESET       14
  88. #define KVM_EXIT_DCR              15
  89. #define KVM_EXIT_NMI              16
  90.  
  91. /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
  92. struct kvm_run {
  93.     /* in */
  94.     __u8 request_interrupt_window;
  95.     __u8 padding1[7];
  96.  
  97.     /* out */
  98.     __u32 exit_reason;
  99.     __u8 ready_for_interrupt_injection;
  100.     __u8 if_flag;
  101.     __u8 padding2[2];
  102.  
  103.     /* in (pre_kvm_run), out (post_kvm_run) */
  104.     __u64 cr8;
  105.     __u64 apic_base;
  106.  
  107.     union {
  108.         /* KVM_EXIT_UNKNOWN */
  109.         struct {
  110.             __u64 hardware_exit_reason;
  111.         } hw;
  112.         /* KVM_EXIT_FAIL_ENTRY */
  113.         struct {
  114.             __u64 hardware_entry_failure_reason;
  115.         } fail_entry;
  116.         /* KVM_EXIT_EXCEPTION */
  117.         struct {
  118.             __u32 exception;
  119.             __u32 error_code;
  120.         } ex;
  121.         /* KVM_EXIT_IO */
  122.         struct {
  123. #define KVM_EXIT_IO_IN  0
  124. #define KVM_EXIT_IO_OUT 1
  125.             __u8 direction;
  126.             __u8 size; /* bytes */
  127.             __u16 port;
  128.             __u32 count;
  129.             __u64 data_offset; /* relative to kvm_run start */
  130.         } io;
  131.         struct {
  132.             struct kvm_debug_exit_arch arch;
  133.         } debug;
  134.         /* KVM_EXIT_MMIO */
  135.         struct {
  136.             __u64 phys_addr;
  137.             __u8  data[8];
  138.             __u32 len;
  139.             __u8  is_write;
  140.         } mmio;
  141.         /* KVM_EXIT_HYPERCALL */
  142.         struct {
  143.             __u64 nr;
  144.             __u64 args[6];
  145.             __u64 ret;
  146.             __u32 longmode;
  147.             __u32 pad;
  148.         } hypercall;
  149.         /* KVM_EXIT_TPR_ACCESS */
  150.         struct {
  151.             __u64 rip;
  152.             __u32 is_write;
  153.             __u32 pad;
  154.         } tpr_access;
  155.         /* KVM_EXIT_S390_SIEIC */
  156.         struct {
  157.             __u8 icptcode;
  158.             __u64 mask; /* psw upper half */
  159.             __u64 addr; /* psw lower half */
  160.             __u16 ipa;
  161.             __u32 ipb;
  162.         } s390_sieic;
  163.         /* KVM_EXIT_S390_RESET */
  164. #define KVM_S390_RESET_POR       1
  165. #define KVM_S390_RESET_CLEAR     2
  166. #define KVM_S390_RESET_SUBSYSTEM 4
  167. #define KVM_S390_RESET_CPU_INIT  8
  168. #define KVM_S390_RESET_IPL       16
  169.         __u64 s390_reset_flags;
  170.         /* KVM_EXIT_DCR */
  171.         struct {
  172.             __u32 dcrn;
  173.             __u32 data;
  174.             __u8  is_write;
  175.         } dcr;
  176.         /* Fix the size of the union. */
  177.         char padding[256];
  178.     };
  179. };
  180.  
  181. /* for KVM_REGISTER_COALESCED_MMIO / KVM_UNREGISTER_COALESCED_MMIO */
  182.  
  183. struct kvm_coalesced_mmio_zone {
  184.     __u64 addr;
  185.     __u32 size;
  186.     __u32 pad;
  187. };
  188.  
  189. struct kvm_coalesced_mmio {
  190.     __u64 phys_addr;
  191.     __u32 len;
  192.     __u32 pad;
  193.     __u8  data[8];
  194. };
  195.  
  196. struct kvm_coalesced_mmio_ring {
  197.     __u32 first, last;
  198.     struct kvm_coalesced_mmio coalesced_mmio[0];
  199. };
  200.  
  201. #define KVM_COALESCED_MMIO_MAX \
  202.     ((PAGE_SIZE - sizeof(struct kvm_coalesced_mmio_ring)) / \
  203.      sizeof(struct kvm_coalesced_mmio))
  204.  
  205. /* for KVM_TRANSLATE */
  206. struct kvm_translation {
  207.     /* in */
  208.     __u64 linear_address;
  209.  
  210.     /* out */
  211.     __u64 physical_address;
  212.     __u8  valid;
  213.     __u8  writeable;
  214.     __u8  usermode;
  215.     __u8  pad[5];
  216. };
  217.  
  218. /* for KVM_INTERRUPT */
  219. struct kvm_interrupt {
  220.     /* in */
  221.     __u32 irq;
  222. };
  223.  
  224. /* for KVM_GET_DIRTY_LOG */
  225. struct kvm_dirty_log {
  226.     __u32 slot;
  227.     __u32 padding1;
  228.     union {
  229.         void *dirty_bitmap; /* one bit per page */
  230.         __u64 padding2;
  231.     };
  232. };
  233.  
  234. /* for KVM_SET_SIGNAL_MASK */
  235. struct kvm_signal_mask {
  236.     __u32 len;
  237.     __u8  sigset[0];
  238. };
  239.  
  240. /* for KVM_TPR_ACCESS_REPORTING */
  241. struct kvm_tpr_access_ctl {
  242.     __u32 enabled;
  243.     __u32 flags;
  244.     __u32 reserved[8];
  245. };
  246.  
  247. /* for KVM_SET_VAPIC_ADDR */
  248. struct kvm_vapic_addr {
  249.     __u64 vapic_addr;
  250. };
  251.  
  252. /* for KVM_SET_MPSTATE */
  253.  
  254. #define KVM_MP_STATE_RUNNABLE          0
  255. #define KVM_MP_STATE_UNINITIALIZED     1
  256. #define KVM_MP_STATE_INIT_RECEIVED     2
  257. #define KVM_MP_STATE_HALTED            3
  258. #define KVM_MP_STATE_SIPI_RECEIVED     4
  259.  
  260. struct kvm_mp_state {
  261.     __u32 mp_state;
  262. };
  263.  
  264. struct kvm_s390_psw {
  265.     __u64 mask;
  266.     __u64 addr;
  267. };
  268.  
  269. /* valid values for type in kvm_s390_interrupt */
  270. #define KVM_S390_SIGP_STOP        0xfffe0000u
  271. #define KVM_S390_PROGRAM_INT        0xfffe0001u
  272. #define KVM_S390_SIGP_SET_PREFIX    0xfffe0002u
  273. #define KVM_S390_RESTART        0xfffe0003u
  274. #define KVM_S390_INT_VIRTIO        0xffff2603u
  275. #define KVM_S390_INT_SERVICE        0xffff2401u
  276. #define KVM_S390_INT_EMERGENCY        0xffff1201u
  277.  
  278. struct kvm_s390_interrupt {
  279.     __u32 type;
  280.     __u32 parm;
  281.     __u64 parm64;
  282. };
  283.  
  284. /* for KVM_SET_GUEST_DEBUG */
  285.  
  286. #define KVM_GUESTDBG_ENABLE        0x00000001
  287. #define KVM_GUESTDBG_SINGLESTEP        0x00000002
  288.  
  289. struct kvm_guest_debug {
  290.     __u32 control;
  291.     __u32 pad;
  292.     struct kvm_guest_debug_arch arch;
  293. };
  294.  
  295. #define KVM_TRC_SHIFT           16
  296. /*
  297.  * kvm trace categories
  298.  */
  299. #define KVM_TRC_ENTRYEXIT       (1 << KVM_TRC_SHIFT)
  300. #define KVM_TRC_HANDLER         (1 << (KVM_TRC_SHIFT + 1)) /* only 12 bits */
  301.  
  302. /*
  303.  * kvm trace action
  304.  */
  305. #define KVM_TRC_VMENTRY         (KVM_TRC_ENTRYEXIT + 0x01)
  306. #define KVM_TRC_VMEXIT          (KVM_TRC_ENTRYEXIT + 0x02)
  307. #define KVM_TRC_PAGE_FAULT      (KVM_TRC_HANDLER + 0x01)
  308.  
  309. #define KVM_TRC_HEAD_SIZE       12
  310. #define KVM_TRC_CYCLE_SIZE      8
  311. #define KVM_TRC_EXTRA_MAX       7
  312.  
  313. /* This structure represents a single trace buffer record. */
  314. struct kvm_trace_rec {
  315.     /* variable rec_val
  316.      * is split into:
  317.      * bits 0 - 27  -> event id
  318.      * bits 28 -30  -> number of extra data args of size u32
  319.      * bits 31      -> binary indicator for if tsc is in record
  320.      */
  321.     __u32 rec_val;
  322.     __u32 pid;
  323.     __u32 vcpu_id;
  324.     union {
  325.         struct {
  326.             __u64 timestamp;
  327.             __u32 extra_u32[KVM_TRC_EXTRA_MAX];
  328.         } __attribute__((packed)) timestamp;
  329.         struct {
  330.             __u32 extra_u32[KVM_TRC_EXTRA_MAX];
  331.         } notimestamp;
  332.     } u;
  333. };
  334.  
  335. #define TRACE_REC_EVENT_ID(val) \
  336.         (0x0fffffff & (val))
  337. #define TRACE_REC_NUM_DATA_ARGS(val) \
  338.         (0x70000000 & ((val) << 28))
  339. #define TRACE_REC_TCS(val) \
  340.         (0x80000000 & ((val) << 31))
  341.  
  342. #define KVMIO 0xAE
  343.  
  344. /*
  345.  * ioctls for /dev/kvm fds:
  346.  */
  347. #define KVM_GET_API_VERSION       _IO(KVMIO,   0x00)
  348. #define KVM_CREATE_VM             _IO(KVMIO,   0x01) /* returns a VM fd */
  349. #define KVM_GET_MSR_INDEX_LIST    _IOWR(KVMIO, 0x02, struct kvm_msr_list)
  350.  
  351. #define KVM_S390_ENABLE_SIE       _IO(KVMIO,   0x06)
  352. /*
  353.  * Check if a kvm extension is available.  Argument is extension number,
  354.  * return is 1 (yes) or 0 (no, sorry).
  355.  */
  356. #define KVM_CHECK_EXTENSION       _IO(KVMIO,   0x03)
  357. /*
  358.  * Get size for mmap(vcpu_fd)
  359.  */
  360. #define KVM_GET_VCPU_MMAP_SIZE    _IO(KVMIO,   0x04) /* in bytes */
  361. #define KVM_GET_SUPPORTED_CPUID   _IOWR(KVMIO, 0x05, struct kvm_cpuid2)
  362. /*
  363.  * ioctls for kvm trace
  364.  */
  365. #define KVM_TRACE_ENABLE          _IOW(KVMIO, 0x06, struct kvm_user_trace_setup)
  366. #define KVM_TRACE_PAUSE           _IO(KVMIO,  0x07)
  367. #define KVM_TRACE_DISABLE         _IO(KVMIO,  0x08)
  368. /*
  369.  * Extension capability list.
  370.  */
  371. #define KVM_CAP_IRQCHIP      0
  372. #define KVM_CAP_HLT      1
  373. #define KVM_CAP_MMU_SHADOW_CACHE_CONTROL 2
  374. #define KVM_CAP_USER_MEMORY 3
  375. #define KVM_CAP_SET_TSS_ADDR 4
  376. #define KVM_CAP_VAPIC 6
  377. #define KVM_CAP_EXT_CPUID 7
  378. #define KVM_CAP_CLOCKSOURCE 8
  379. #define KVM_CAP_NR_VCPUS 9       /* returns max vcpus per vm */
  380. #define KVM_CAP_NR_MEMSLOTS 10   /* returns max memory slots per vm */
  381. #define KVM_CAP_PIT 11
  382. #define KVM_CAP_NOP_IO_DELAY 12
  383. #define KVM_CAP_PV_MMU 13
  384. #define KVM_CAP_MP_STATE 14
  385. #define KVM_CAP_COALESCED_MMIO 15
  386. #define KVM_CAP_SYNC_MMU 16  /* Changes to host mmap are reflected in guest */
  387. #ifdef __KVM_HAVE_DEVICE_ASSIGNMENT
  388. #define KVM_CAP_DEVICE_ASSIGNMENT 17
  389. #endif
  390. #define KVM_CAP_IOMMU 18
  391. #ifdef __KVM_HAVE_MSI
  392. #define KVM_CAP_DEVICE_MSI 20
  393. #endif
  394. /* Bug in KVM_SET_USER_MEMORY_REGION fixed: */
  395. #define KVM_CAP_DESTROY_MEMORY_REGION_WORKS 21
  396. #ifdef __KVM_HAVE_USER_NMI
  397. #define KVM_CAP_USER_NMI 22
  398. #endif
  399. #ifdef __KVM_HAVE_GUEST_DEBUG
  400. #define KVM_CAP_SET_GUEST_DEBUG 23
  401. #endif
  402. #ifdef __KVM_HAVE_PIT
  403. #define KVM_CAP_REINJECT_CONTROL 24
  404. #endif
  405. #ifdef __KVM_HAVE_IOAPIC
  406. #define KVM_CAP_IRQ_ROUTING 25
  407. #endif
  408. #define KVM_CAP_IRQ_INJECT_STATUS 26
  409. #ifdef __KVM_HAVE_DEVICE_ASSIGNMENT
  410. #define KVM_CAP_DEVICE_DEASSIGNMENT 27
  411. #endif
  412. #ifdef __KVM_HAVE_MSIX
  413. #define KVM_CAP_DEVICE_MSIX 28
  414. #endif
  415. #define KVM_CAP_ASSIGN_DEV_IRQ 29
  416. /* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */
  417. #define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30
  418.  
  419. #ifdef KVM_CAP_IRQ_ROUTING
  420.  
  421. struct kvm_irq_routing_irqchip {
  422.     __u32 irqchip;
  423.     __u32 pin;
  424. };
  425.  
  426. struct kvm_irq_routing_msi {
  427.     __u32 address_lo;
  428.     __u32 address_hi;
  429.     __u32 data;
  430.     __u32 pad;
  431. };
  432.  
  433. /* gsi routing entry types */
  434. #define KVM_IRQ_ROUTING_IRQCHIP 1
  435. #define KVM_IRQ_ROUTING_MSI 2
  436.  
  437. struct kvm_irq_routing_entry {
  438.     __u32 gsi;
  439.     __u32 type;
  440.     __u32 flags;
  441.     __u32 pad;
  442.     union {
  443.         struct kvm_irq_routing_irqchip irqchip;
  444.         struct kvm_irq_routing_msi msi;
  445.         __u32 pad[8];
  446.     } u;
  447. };
  448.  
  449. struct kvm_irq_routing {
  450.     __u32 nr;
  451.     __u32 flags;
  452.     struct kvm_irq_routing_entry entries[0];
  453. };
  454.  
  455. #endif
  456.  
  457. /*
  458.  * ioctls for VM fds
  459.  */
  460. #define KVM_SET_MEMORY_REGION     _IOW(KVMIO, 0x40, struct kvm_memory_region)
  461. #define KVM_SET_NR_MMU_PAGES      _IO(KVMIO, 0x44)
  462. #define KVM_GET_NR_MMU_PAGES      _IO(KVMIO, 0x45)
  463. #define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46,\
  464.                     struct kvm_userspace_memory_region)
  465. #define KVM_SET_TSS_ADDR          _IO(KVMIO, 0x47)
  466. /*
  467.  * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns
  468.  * a vcpu fd.
  469.  */
  470. #define KVM_CREATE_VCPU           _IO(KVMIO,  0x41)
  471. #define KVM_GET_DIRTY_LOG         _IOW(KVMIO, 0x42, struct kvm_dirty_log)
  472. #define KVM_SET_MEMORY_ALIAS      _IOW(KVMIO, 0x43, struct kvm_memory_alias)
  473. /* Device model IOC */
  474. #define KVM_CREATE_IRQCHIP      _IO(KVMIO,  0x60)
  475. #define KVM_IRQ_LINE          _IOW(KVMIO, 0x61, struct kvm_irq_level)
  476. #define KVM_GET_IRQCHIP          _IOWR(KVMIO, 0x62, struct kvm_irqchip)
  477. #define KVM_SET_IRQCHIP          _IOR(KVMIO,  0x63, struct kvm_irqchip)
  478. #define KVM_CREATE_PIT          _IO(KVMIO,  0x64)
  479. #define KVM_GET_PIT          _IOWR(KVMIO, 0x65, struct kvm_pit_state)
  480. #define KVM_SET_PIT          _IOR(KVMIO,  0x66, struct kvm_pit_state)
  481. #define KVM_IRQ_LINE_STATUS      _IOWR(KVMIO, 0x67, struct kvm_irq_level)
  482. #define KVM_REGISTER_COALESCED_MMIO \
  483.             _IOW(KVMIO,  0x67, struct kvm_coalesced_mmio_zone)
  484. #define KVM_UNREGISTER_COALESCED_MMIO \
  485.             _IOW(KVMIO,  0x68, struct kvm_coalesced_mmio_zone)
  486. #define KVM_ASSIGN_PCI_DEVICE _IOR(KVMIO, 0x69, \
  487.                    struct kvm_assigned_pci_dev)
  488. #define KVM_SET_GSI_ROUTING       _IOW(KVMIO, 0x6a, struct kvm_irq_routing)
  489. /* deprecated, replaced by KVM_ASSIGN_DEV_IRQ */
  490. #define KVM_ASSIGN_IRQ _IOR(KVMIO, 0x70, \
  491.                 struct kvm_assigned_irq)
  492. #define KVM_ASSIGN_DEV_IRQ        _IOW(KVMIO, 0x70, struct kvm_assigned_irq)
  493. #define KVM_REINJECT_CONTROL      _IO(KVMIO, 0x71)
  494. #define KVM_DEASSIGN_PCI_DEVICE _IOW(KVMIO, 0x72, \
  495.                      struct kvm_assigned_pci_dev)
  496. #define KVM_ASSIGN_SET_MSIX_NR \
  497.             _IOW(KVMIO, 0x73, struct kvm_assigned_msix_nr)
  498. #define KVM_ASSIGN_SET_MSIX_ENTRY \
  499.             _IOW(KVMIO, 0x74, struct kvm_assigned_msix_entry)
  500. #define KVM_DEASSIGN_DEV_IRQ       _IOW(KVMIO, 0x75, struct kvm_assigned_irq)
  501.  
  502. /*
  503.  * ioctls for vcpu fds
  504.  */
  505. #define KVM_RUN                   _IO(KVMIO,   0x80)
  506. #define KVM_GET_REGS              _IOR(KVMIO,  0x81, struct kvm_regs)
  507. #define KVM_SET_REGS              _IOW(KVMIO,  0x82, struct kvm_regs)
  508. #define KVM_GET_SREGS             _IOR(KVMIO,  0x83, struct kvm_sregs)
  509. #define KVM_SET_SREGS             _IOW(KVMIO,  0x84, struct kvm_sregs)
  510. #define KVM_TRANSLATE             _IOWR(KVMIO, 0x85, struct kvm_translation)
  511. #define KVM_INTERRUPT             _IOW(KVMIO,  0x86, struct kvm_interrupt)
  512. /* KVM_DEBUG_GUEST is no longer supported, use KVM_SET_GUEST_DEBUG instead */
  513. #define KVM_DEBUG_GUEST           __KVM_DEPRECATED_DEBUG_GUEST
  514. #define KVM_GET_MSRS              _IOWR(KVMIO, 0x88, struct kvm_msrs)
  515. #define KVM_SET_MSRS              _IOW(KVMIO,  0x89, struct kvm_msrs)
  516. #define KVM_SET_CPUID             _IOW(KVMIO,  0x8a, struct kvm_cpuid)
  517. #define KVM_SET_SIGNAL_MASK       _IOW(KVMIO,  0x8b, struct kvm_signal_mask)
  518. #define KVM_GET_FPU               _IOR(KVMIO,  0x8c, struct kvm_fpu)
  519. #define KVM_SET_FPU               _IOW(KVMIO,  0x8d, struct kvm_fpu)
  520. #define KVM_GET_LAPIC             _IOR(KVMIO,  0x8e, struct kvm_lapic_state)
  521. #define KVM_SET_LAPIC             _IOW(KVMIO,  0x8f, struct kvm_lapic_state)
  522. #define KVM_SET_CPUID2            _IOW(KVMIO,  0x90, struct kvm_cpuid2)
  523. #define KVM_GET_CPUID2            _IOWR(KVMIO, 0x91, struct kvm_cpuid2)
  524. /* Available with KVM_CAP_VAPIC */
  525. #define KVM_TPR_ACCESS_REPORTING  _IOWR(KVMIO,  0x92, struct kvm_tpr_access_ctl)
  526. /* Available with KVM_CAP_VAPIC */
  527. #define KVM_SET_VAPIC_ADDR        _IOW(KVMIO,  0x93, struct kvm_vapic_addr)
  528. /* valid for virtual machine (for floating interrupt)_and_ vcpu */
  529. #define KVM_S390_INTERRUPT        _IOW(KVMIO,  0x94, struct kvm_s390_interrupt)
  530. /* store status for s390 */
  531. #define KVM_S390_STORE_STATUS_NOADDR    (-1ul)
  532. #define KVM_S390_STORE_STATUS_PREFIXED  (-2ul)
  533. #define KVM_S390_STORE_STATUS      _IOW(KVMIO,  0x95, unsigned long)
  534. /* initial ipl psw for s390 */
  535. #define KVM_S390_SET_INITIAL_PSW  _IOW(KVMIO,  0x96, struct kvm_s390_psw)
  536. /* initial reset for s390 */
  537. #define KVM_S390_INITIAL_RESET    _IO(KVMIO,  0x97)
  538. #define KVM_GET_MP_STATE          _IOR(KVMIO,  0x98, struct kvm_mp_state)
  539. #define KVM_SET_MP_STATE          _IOW(KVMIO,  0x99, struct kvm_mp_state)
  540. /* Available with KVM_CAP_NMI */
  541. #define KVM_NMI                   _IO(KVMIO,  0x9a)
  542. /* Available with KVM_CAP_SET_GUEST_DEBUG */
  543. #define KVM_SET_GUEST_DEBUG       _IOW(KVMIO,  0x9b, struct kvm_guest_debug)
  544.  
  545. /*
  546.  * Deprecated interfaces
  547.  */
  548. struct kvm_breakpoint {
  549.     __u32 enabled;
  550.     __u32 padding;
  551.     __u64 address;
  552. };
  553.  
  554. struct kvm_debug_guest {
  555.     __u32 enabled;
  556.     __u32 pad;
  557.     struct kvm_breakpoint breakpoints[4];
  558.     __u32 singlestep;
  559. };
  560.  
  561. #define __KVM_DEPRECATED_DEBUG_GUEST _IOW(KVMIO,  0x87, struct kvm_debug_guest)
  562.  
  563. #define KVM_IA64_VCPU_GET_STACK   _IOR(KVMIO,  0x9a, void *)
  564. #define KVM_IA64_VCPU_SET_STACK   _IOW(KVMIO,  0x9b, void *)
  565.  
  566. #define KVM_TRC_INJ_VIRQ         (KVM_TRC_HANDLER + 0x02)
  567. #define KVM_TRC_REDELIVER_EVT    (KVM_TRC_HANDLER + 0x03)
  568. #define KVM_TRC_PEND_INTR        (KVM_TRC_HANDLER + 0x04)
  569. #define KVM_TRC_IO_READ          (KVM_TRC_HANDLER + 0x05)
  570. #define KVM_TRC_IO_WRITE         (KVM_TRC_HANDLER + 0x06)
  571. #define KVM_TRC_CR_READ          (KVM_TRC_HANDLER + 0x07)
  572. #define KVM_TRC_CR_WRITE         (KVM_TRC_HANDLER + 0x08)
  573. #define KVM_TRC_DR_READ          (KVM_TRC_HANDLER + 0x09)
  574. #define KVM_TRC_DR_WRITE         (KVM_TRC_HANDLER + 0x0A)
  575. #define KVM_TRC_MSR_READ         (KVM_TRC_HANDLER + 0x0B)
  576. #define KVM_TRC_MSR_WRITE        (KVM_TRC_HANDLER + 0x0C)
  577. #define KVM_TRC_CPUID            (KVM_TRC_HANDLER + 0x0D)
  578. #define KVM_TRC_INTR             (KVM_TRC_HANDLER + 0x0E)
  579. #define KVM_TRC_NMI              (KVM_TRC_HANDLER + 0x0F)
  580. #define KVM_TRC_VMMCALL          (KVM_TRC_HANDLER + 0x10)
  581. #define KVM_TRC_HLT              (KVM_TRC_HANDLER + 0x11)
  582. #define KVM_TRC_CLTS             (KVM_TRC_HANDLER + 0x12)
  583. #define KVM_TRC_LMSW             (KVM_TRC_HANDLER + 0x13)
  584. #define KVM_TRC_APIC_ACCESS      (KVM_TRC_HANDLER + 0x14)
  585. #define KVM_TRC_TDP_FAULT        (KVM_TRC_HANDLER + 0x15)
  586. #define KVM_TRC_GTLB_WRITE       (KVM_TRC_HANDLER + 0x16)
  587. #define KVM_TRC_STLB_WRITE       (KVM_TRC_HANDLER + 0x17)
  588. #define KVM_TRC_STLB_INVAL       (KVM_TRC_HANDLER + 0x18)
  589. #define KVM_TRC_PPC_INSTR        (KVM_TRC_HANDLER + 0x19)
  590.  
  591. #define KVM_DEV_ASSIGN_ENABLE_IOMMU    (1 << 0)
  592.  
  593. struct kvm_assigned_pci_dev {
  594.     __u32 assigned_dev_id;
  595.     __u32 busnr;
  596.     __u32 devfn;
  597.     __u32 flags;
  598.     union {
  599.         __u32 reserved[12];
  600.     };
  601. };
  602.  
  603. #define KVM_DEV_IRQ_HOST_INTX    (1 << 0)
  604. #define KVM_DEV_IRQ_HOST_MSI     (1 << 1)
  605. #define KVM_DEV_IRQ_HOST_MSIX    (1 << 2)
  606.  
  607. #define KVM_DEV_IRQ_GUEST_INTX   (1 << 8)
  608. #define KVM_DEV_IRQ_GUEST_MSI    (1 << 9)
  609. #define KVM_DEV_IRQ_GUEST_MSIX   (1 << 10)
  610.  
  611. #define KVM_DEV_IRQ_HOST_MASK     0x00ff
  612. #define KVM_DEV_IRQ_GUEST_MASK   0xff00
  613.  
  614. struct kvm_assigned_irq {
  615.     __u32 assigned_dev_id;
  616.     __u32 host_irq;
  617.     __u32 guest_irq;
  618.     __u32 flags;
  619.     union {
  620.         struct {
  621.             __u32 addr_lo;
  622.             __u32 addr_hi;
  623.             __u32 data;
  624.         } guest_msi;
  625.         __u32 reserved[12];
  626.     };
  627. };
  628.  
  629.  
  630. struct kvm_assigned_msix_nr {
  631.     __u32 assigned_dev_id;
  632.     __u16 entry_nr;
  633.     __u16 padding;
  634. };
  635.  
  636. #define KVM_MAX_MSIX_PER_DEV        512
  637. struct kvm_assigned_msix_entry {
  638.     __u32 assigned_dev_id;
  639.     __u32 gsi;
  640.     __u16 entry; /* The index of entry in the MSI-X table */
  641.     __u16 padding[3];
  642. };
  643.  
  644. #endif
  645.